package com.zzyl.common.utils;

import lombok.extern.slf4j.Slf4j;

/**
 * 线程局部变量工具类
 * 它提供了一种在多线程环境下，每个线程都可以独立访问自己的变量副本的机制。
 * ThreadLocal中存储的数据对于每个线程来说都是独立的，互不干扰。
 * @author YH
 */

@Slf4j
public class UserThreadLocal {
    // 线程局部变量
    private static final ThreadLocal<Long> LOCAL = new ThreadLocal<>();

    private UserThreadLocal() {

    }

    /**
     * 将authUserInfo放到ThreadLocal中
     * @param authUserInfo {@link Long}
     */
    public static void set(Long authUserInfo) {
        //  设置线程局部变量的值
        LOCAL.set(authUserInfo);
    }

    /**
     * 从ThreadLocal中获取authUserInfo
     */
    public static Long get() {
        return LOCAL.get();
    }

    /**
     * 从当前线程中删除authUserInfo
     */
    public static void remove() {
        LOCAL.remove();
    }

    /**
     * 从当前线程中获取前端用户id
     */
    public static Long getUserId() {
        return LOCAL.get();
    }
}
